module ExprDataTypes where

data Combo = Mas ComboTuple ComboTuple | 
	Menos ComboTuple ComboTuple | 
	Por ComboTuple ComboTuple |
	Div ComboTuple ComboTuple | 
	Igual ComboTuple ComboTuple | 
	Distinto ComboTuple ComboTuple | 
	Menor ComboTuple ComboTuple | 
	Mayor ComboTuple ComboTuple | 
	MayorIgual ComboTuple ComboTuple | 
	MenorIgual ComboTuple ComboTuple | 
	Parentesis ComboTuple | 
	ONot ComboTuple | 
	OAnd ComboTuple ComboTuple | 
	OOr ComboTuple ComboTuple | 
    BTrue | 
    BFalse |
    Id String |
    NumInt Integer |
    NumDouble Double |
    Asignacion String ComboTuple | 
    Incremento ComboTuple |	
	Decremento ComboTuple |	
    Declaracion String String ExpOpc | 
    Secuencia ComboTuple ComboTuple | 
    Condicional ComboTuple [ComboTuple] BloqueElse | 
    Read | 
    Write String | 
    Length String | 
    Lit String | 
    Iteracion ComboTuple [ComboTuple] BloqueElse  deriving (Show,Eq)

type Tipo = String
data BloqueElse = BElse [ComboTuple] | NoBloque deriving (Show,Eq)

type VarMap = [(String,String,Integer)]

data ExpOpc = EOpc ComboTuple
    | NoExp deriving (Show, Eq)

type ComboTuple = (Combo, Tipo)

data TInstruccionAM = PUSH Integer | PUSHD Double | PUSHT | PUSHF | PUSHS String | NOP | FCJP String Integer | CJP String Integer | UJP String Integer | DUP | CONV |
					  ADD | MULT | SUB | DIV | EQ6 | AND | OR | LT6 | GT6 | NOT |
					  FETCH Integer | FETCHCOE Integer String String |POP | STORE Integer | WRITE String | READ | LENGTH String | CONVD |
                      LABEL String Integer deriving (Show,Eq)
					  
